class Stack:
    #栈的基本原理就是先进后出
    def __init__(self,maxlen=None):
        self.__q1 = []
        self.__q2 = []
        self.maxlen = maxlen#栈的大小
    def push(self,data):
        #使用去q1存放入栈的元素
        if self.maxlen==None:
            self.__q1.append(data)
        else:
            if self.isfull():
                raise "栈已满，等待栈腾出新空间！！！"
            self.__q1.append(data)
    def pop(self):
        if self.isempty():
            raise "空栈，不能执行出栈操作"
        else:
            self.__q2.append(self.__q1.pop())
            return self.__q2.pop()
    def index(self,data):
        #查找栈中的元素的位置,出现的第一个
        if self.isempty():
            raise "空栈"
        else:
            if data not in self.__q1:
                return "栈中没有"+data
            return self.__q1.index(data)
    def top(self):
        #查看栈顶元素。
        if self.isempty():
            raise "栈为空"
        else:
            return self.__q1[len(self.__q1)-1]
    def isfull(self):
        if self.maxlen==None:
            return False
        else:
            if len(self.__q1)==self.maxlen:
                return True
            return False
    def isempty(self):
        if len(self.__q1)==0:
            return True
        return False
    def display(self):
        print("栈的显示:",self.__q1)
    def __len__(self):
        if len(self.__q1)!=0:
            return len(self.__q1)
        else:
            return 0
    def __str__(self):
        if self.maxlen==None:
            return "栈基本大小{}".format("无限大(取决于你的电脑位数)")
        return "栈基本容量为:{},本栈使用两个队列实现，q1:存放入栈元素，q2:返回出栈元素".format(self.maxlen)

if __name__ == '__main__':
    s = Stack()#定义一个大小为2的空栈
    #执行入栈操作
    s.push(1)
    print(s.index(1))
    s.push(2)
    #执行出栈操作
    print(s.top())
    s.display()
    print(s.pop())
    print(s.pop())
    print(len(s))

